package br.ufpe.cin.xmldbdev.dados.xml;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import net.sf.saxon.trans.XPathException;

import org.jdom.Element;

import br.ufpe.cin.xmldbdev.dados.IRepositorioConexao;
import br.ufpe.cin.xmldbdev.modelo.Conexao;
import br.ufpe.cin.xmldbdev.util.Constantes;

public class RepositorioConexaoXML implements IRepositorioConexao {
	
	private XMLFileWriter fileWriter;
	private XMLFileReader fileReader;
	private File pasta;
	
	public RepositorioConexaoXML(){
		pasta = new File(Constantes.CFG);
		if(!pasta.exists()){
			pasta.mkdirs();
		}
		this.fileWriter = new XMLFileWriter(Constantes.CONEXOES, pasta, Constantes.CFGEXT);
		this.fileReader = new XMLFileReader(new File(pasta, Constantes.CFGEXT));
	}

	
	public void salvarConexoes(List<Conexao> conexoes) throws IOException, Exception {
		for (Conexao c : conexoes) {
			this.inserirConexao(c);
		}
		this.salvarXML();
	}

	private void inserirConexao(Conexao conexao) {
		Element element = new Element(Constantes.CONEXAO);
		
		Element connectionName = new Element(Constantes.NOME);
		connectionName.setText(conexao.getNome());
		element.addContent(connectionName);
		
		Element userName = new Element(Constantes.USERNAME);
		userName.setText(conexao.getNomeUsuario());
		element.addContent(userName);
		
		Element password = new Element(Constantes.PASSWORD);
		password.setText(conexao.getSenha());
		element.addContent(password);
		
		Element hostName = new Element(Constantes.HOSTNAME);
		hostName.setText(conexao.getNomeHost());
		element.addContent(hostName);
		
		Element porta = new Element(Constantes.PORTA);
		porta.setText(""+conexao.getPorta());
		element.addContent(porta);
		
		try {
			fileWriter.addComplexNode(element);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private void salvarXML() throws IOException, Exception{
		this.fileWriter.writeFile();
	}

	public List<Conexao> carregarConexoes() throws XPathException {
		List<Conexao> conexoes = new ArrayList<Conexao>();
		int numeroConexoes = fileReader.numberOfNodes(Constantes.CONEXAO);
		if (numeroConexoes < 0)
			return conexoes;
		for (int i = 0; i < numeroConexoes; i++) {
			Conexao c = new Conexao();
			c.setNome(fileReader.readNode(Constantes.NOME, i));
			c.setNomeHost(fileReader.readNode(Constantes.HOSTNAME, i));
			c.setNomeUsuario(fileReader.readNode(Constantes.USERNAME, i));
			c.setPorta(Integer.parseInt(fileReader.readNode(Constantes.PORTA, i)));
			c.setSenha(fileReader.readNode(Constantes.PASSWORD, i));
			conexoes.add(c);
		}
		return conexoes;
	}
	
	public void deleteFile(){
		fileReader.deleteFile();
	}

}
